export default function unmountNode(node) {
  // 获取节点的虚拟DOM
  const virtualDOM = node._virtualDOM;

  // 1. 节点是文本，直接删除
  if (virtualDOM.type === "text") {
    node.remove();
    return;
  }

  // 2. 节点是否由组件生成
  let component = virtualDOM.component;
  if (component) {
    // 节点是由组件生成的，需要调用组件的卸载生命周期函数
    component.componentWillUnmount();
  }

  // 3. 节点是否包含ref属性
  if (virtualDOM.props && virtualDOM.props.ref) {
    // 节点上有 ref 属性的，还需要删除通过 ref 属性传递给组件的 DOM 节点对象
    virtualDOM.props.ref(null);
  }

  // 4. 节点是否包含事件属性
  Object.keys(virtualDOM.props).forEach((propName) => {
    if (propName.slice(0, 2) === "on") {
      // 节点上有事件，还需要删除事件对应的事件处理函数
      const eventName = propName.toLowerCase().slice(2);
      const eventHandler = virtualDOM.props[propName];
      node.removeEventListener(eventName, eventHandler);
    }
  });

  // 5. 节点是否包含子节点，递归删除子节点
  if (node.childNodes.length > 0) {
    for (let i = 0; i < node.childNodes.length; i++) {
      const child = node.childNodes[i];
      unmountNode(child);
      i--;
    }
  }

  // 删除节点
  node.remove();
}
